package com.nutrition.health.service;

import com.nutrition.health.model.FoodItem;
import com.nutrition.health.model.FoodItem.FoodCategory;
import com.nutrition.health.model.NutritionInfo;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Optional;

public interface FoodItemService {
    
    List<FoodItem> getAllFoodItems();
    
    Page<FoodItem> getAllFoodItems(Pageable pageable);
    
    Optional<FoodItem> getFoodItemById(Long id);
    
    Optional<FoodItem> getFoodItemByBarcode(String barcode);
    
    List<FoodItem> getFoodItemsByCategory(FoodCategory category);
    
    Page<FoodItem> searchFoodItems(String keyword, Pageable pageable);
    
    FoodItem createFoodItem(FoodItem foodItem);
    
    FoodItem updateFoodItem(Long id, FoodItem foodItemDetails);
    
    void deleteFoodItem(Long id);
    
    NutritionInfo getNutritionInfo(Long foodItemId);
    
    NutritionInfo updateNutritionInfo(Long foodItemId, NutritionInfo nutritionInfo);
    
    /**
     * 通过图像分析食品成分
     * @param image 食品图片
     * @return 分析结果，包含食品信息和营养成分
     */
    FoodItem analyzeFoodImage(MultipartFile image);
    
    /**
     * 根据营养需求查找合适的食品
     * @param maxCalories 最大卡路里
     * @param minProtein 最小蛋白质含量
     * @param maxCarbs 最大碳水化合物含量
     * @return 符合条件的食品列表
     */
    List<FoodItem> findFoodItemsByNutrientConstraints(
            Double maxCalories, Double minProtein, Double maxCarbs);
}